/*
 * Jogador.cpp
 */

#include"Jogador.h"

#include <iostream>
#include <string>
#include <vector>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

using namespace std;

static int ID = 0;

Jogador::Jogador()
{

}


Jogador::Jogador(string nome)
{
	this->nome = nome;
	pontos = 0;

	ID++;
}

Jogador::~Jogador()
{

}

string Jogador::getNome()
{
	return nome;
}

vector<Peca> Jogador::getPecas()
{
	return pecasJogador;
}

int Jogador::getPontos()
{
	return pontos;
}

int Jogador::getID(){

	return ID;
}

string Jogador::getVez() const
{
	return vez;
}

vector<Jogador> Jogador::getJogadores()
{
	return jogadores;
}

void Jogador::setNome(string nome)
{
	this-> nome = nome;
}

void Jogador::setPecas(vector<Peca> pecas)
{
	this->pecasJogador = pecas;
}

void Jogador::setPontos(int pontos)
{
	this-> pontos = pontos;
}

void Jogador::setID(int id)
{
	this-> ID = id;
}

void Jogador::setVez(string vez)
{
	this->vez += vez;
}

void Jogador::setJogadores(vector<Jogador> jogadores)
{
	this-> jogadores = jogadores;
}

void Jogador::addPeca(Peca peca)
{
	pecasJogador.push_back(peca);
}

bool Jogador::temPecaDupla(vector<Peca> pecasJogador)
{
	vector<Peca> pecasDuplas;

	for(unsigned int i = 0; i < pecasJogador.size(); i++)
	{
		if(pecasJogador[i].getLadoDir() == pecasJogador[i].getLadoEsq())
		{
			pecasDuplas.push_back(pecasJogador[i]);
		}
		return true;
	}
	return false;
}

string Jogador::primeiroJogador(vector<Jogador> jogadores)
{
	for(unsigned int i = 6; i >= 0; i--)
	{
		for(unsigned int j = 0; j < jogadores.size(); j++)
		{
			for(unsigned int k = 0; k < jogadores[j].getPecas().size(); k++)
			{
				if((jogadores[j].getPecas()[k].getLadoDir()) == (jogadores[j].getPecas()[j].getLadoEsq()) == i)
				{
					return jogadores[j].jogador_actual().getNome();
				}
			}
		}
	}
	for(unsigned int i = 11; i >=0; i--)
	{
		for(unsigned int j = 0; j < jogadores.size(); j++)
		{
			for(unsigned int k = 0; k < jogadores[j].getPecas().size(); k++)
			{
				if(jogadores[j].getPecas()[k].getLadoDir() + jogadores[j].getPecas()[k].getLadoEsq() == i)
				{
					return jogadores[j].jogador_actual().getNome();
				}
			}
		}
	}
}

/*void Jogador::verPecasJogaveis()
{
	vector<Peca> pecasJogaveis;

	for(unsigned int i = 0; i < pecasJogador.size(); i++){


}*/

bool Jogador::verJogadorTemPecas()
{
	if(pecasJogador.size() == 0)
	{
		return true;
	}
	else
	{
		return false;
	}
}

void Jogador::troca_jogador()
{
	if(ID == 1)
	{
		ID = 2;
	}
	else
	{
		if(ID == 2)
		{
			ID = 3;
		}
		else
		{
			if(ID == 3)
			{
				ID = 4;
			}
			else
			{
				if(ID == 4)
				{
					ID = 1;
				}
			}
		}
	}
}

Jogador & Jogador::jogador_actual()
{
	Jogador & jogador = jogadores[ID];

	return jogador;
}
